from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.template import RequestContext
from django.template import Context, loader
from polls.models import Poll, Choice
from django.http import Http404

"""
def index(request):
    latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
    t = loader.get_template('polls/index.html')
    c = Context({
            'latest_poll_list' : latest_poll_list,
    })
    return HttpResponse(t.render(c))

def detail(request, poll_id):
    '''
    # Detailed implementation
    try:
        p = Poll.objects.get(pk=poll_id)
    except Poll.DoesNotExist:
        raise Http404
    '''
    p = get_object_or_404(Poll, pk=poll_id)
    # A shortcut
    # No need Context, loader and HttpResponse
    return render_to_response('polls/detail.html', {'poll' : p},
            context_instance=RequestContext(request))

def results(request, poll_id):
    p = get_object_or_404(Poll, pk=poll_id)
    return render_to_response('polls/results.html', {'poll' : p})
"""

def vote(request, poll_id):
    p = get_object_or_404(Poll, pk=poll_id)
    try:
        selected_choice = p.choice_set.get(pk=request.POST['choice'])
    except(KeyError, Choice.DoesNotExist):
        return render_to_response('polls/detail.html', 
            {'poll' : p, 'error_message' : "You didn't select a choice.", }, 
            context_instance=RequestContext(request))
    else:
        selected_choice.votes += 1
        selected_choice.save()
        # Always return an HttpResponseRedirect after successfully dealing
        # with POST data. This prevents data from being posted twice if
        # a user hits the Back button.
        return HttpResponseRedirect(reverse('poll_results', args=(p.id,)))

